perm filename CANON.RAS[UP,DOC]13 blob
sn#673898 filedate 1982-08-27 generic text, type C, neo UTF8
COMMENT ⊗ VALID 00016 PAGES
C REC PAGE DESCRIPTION
C00001 00001
C00003 00002 ---- ImPrint-10 Printer system overview --- by RAS ---- 12/7/81
C00012 00003 ¬reparing an IMP file from listings and TEX:
C00016 00004 CPrint: printing your IMP file
C00021 00005 Fonts for the ImPrint-10
C00025 00006 MakImp: switches
C00031 00007 extra information: font expansion, other switches, sources
C00035 00008 text output and errors
C00041 00009 ImPress format, Read-IMP program
C00044 00010 Overview
C00051 00011 ImPrint-10: starting the CPU
C00055 00012 Console messages while printing
C00058 00013 Starting the ImPrint-10 Printer
C00063 00014 Turning Off Canon
C00064 00015 Diagrams
C00067 00016
C00072 ENDMK
C⊗;
---- ImPrint-10 Printer system overview --- by RAS ---- 12/7/81
Address questions, suggestions and bug sightings to RAS.
(including questions about MakImp, CPrint and Rst fonts, font
conversion, using an ImPrint, supplies and quality of the output.)
OVERVIEW:
There is no such thing as a Canon printer at Margaret Jacks Hall. We do
have its successor, an ImPrint-10, manufactured and `maintained' by the
Imagen Corporation. The ImPrint-10 in our basement is hereby named
`Canon' to honor its ancestor.
The ImPrint-10 printer system is made up of a Canon LBP-10 printer, a
printer controller board, an M68000 based micro, a serial line connected
to a console terminal and either a 9600 baud serial line connected to a
host or an ethernet board with which printing requests are received.
The ImPrint-10 is a stand-alone entity. We (at Sail) talk to it via a
9600 baud terminal port and protocol. The HeathKit console terminal
alongside allows direct communication with the ImPrint micro for
initialization, indecipherable status messages and debugging.
ImPrint software, inside the ImPrint CPU:
ImPress Translater, Painter program
Texto currently at Diablo- will be in ImPrint-10 someday
currently can only be used from IAZ's account at Diablo
with output sent to the ImPrint in LTP's office
Sail software:
PTex, to create DVI files from TEX files;
MakImp, to translate DVI files and listings into IMP files;
Troff→ImP, coming soon to a CPU near you;
Scribe→ImP, is it coming? Only its hairdresser knows for sure,
there is currently a C version somewhere.
CPrint, to send an IMP file to the ImPrint for printing.
Roughly, the procedure for using the ImPrint is:
Prepare your ImP file, run PTex on a TEX file, then run MakImp;
Make sure the ImPrint CPU is ready (page 11);
Make sure the ImPrint printer is ready (page 13);
Send your file to Canon with DO CPrint[can,sys] (page 4).
Documentation is available:
Canon.ras[up,doc] - how to use Canon and supporting programs
ImPress.ras[up,doc] - ImPress language description and file format
Rst.ras[up,doc] - Rst font file description
Canon.con[can,sys] - Canon's current physical condition
NOTES:
IF Canon SPEWS PAPER, PULL OUT THE PAPER TRAY and reinitialize (page 11).
There are no headers or title pages yet, so any listings lying around
are fair game for use as samples.
Since there is no spooler, your printing is done WHILE YOU WAIT, so
when it has started printing, instead of waiting, PICK UP YOUR OUTPUT.
But don't stop here, the details are vital. Read on!
¬reparing an IMP file from listings and TEX:
LISTINGS:
Create an IMP file from a listing with MakImp. Simply "R MakImp" and you
will be prompted for the name of the input file.
Currently we do not have many fonts for listings. The default is CMSA10
at magnification 0.8 which gives 67 lines per page and 122 characters per
line. See doc on the \f switch (page 7) to choose your own font.
TEX Sources:
Compile your program in MYFILE.TEX with the Pascal version of TEX, PTEX:
.R PTex (report any problems to IAZ)
*\input myfile
This will create a file MYFILE.DVI on your directory.
Make a .IMP file from your .DVI file with MakImp:
.R MakImp (report any problems to RAS)
and to the prompt, type MYFILE (or MYFILE.dvi).
TEX FONTS:
There are two types of font files that you need to print TEX sources,
TFM files contain dimensions of characters in a device independent format.
Rst files contain the images of the characters at a particular resolution
and magnification as well as pertinent dimensions.
PTex gets its font information from TFM files in some directory; the
default is [TEX,SYS]. Most fonts currently have TFM there. MakImp only
uses Rst files. The default directory is [Can,Sys]. Below are
instructions on creating fonts.
Both PTex and MakImp look for a font file first on the directory
specified in the TEX declaration, then on the default directory. If no
directory is specified in the declaration, your current directory is used.
(Does TEX try the default if the one you specify is incorrect?)
If I have my own special TFM and Rst files in my FON directory, a
proper TEX font definition is thus "\font z=cmsy10[fon,ras]". If I wish
to use system fonts, I would say "\font z=cmsy10". Note that there is no
guarantee that the Rst font in [Can,sys] actually corresponds to the TFM
file in [Tex,sys]. A check-digit is written into both files, but not used.
If a font file is not found, MakImp will try substituting the same
font unmagnified and if this fails it will give you lots of error
messages. Someday it will allow you to specify an alternative font.
For more information on Rst fonts, see page 5.
CPrint: printing your IMP file
To print IMP (Impress) files, DO CPRINT[can,sys]. It will ask you for
the filename, on the end of which it will append the string `.IMP'. Thus
you can not specify a directory, you must print from your current
directory.
If someone else is using Canon, you will be asked to wait. Sometimes
this program never finishes, even though the printing job is done. You
might go downstairs and, if the Canon is idle, send a message to the
person using it. You can find out their user name with the command .PJ
tty57. If you have to map to their screen, to free up the line you must
type <call> and then give the Monitor command FINISH.
The sending program is quiet as it runs, unless the ImPrint needs
attention, paper, toner, premix or TLC. It also gives occasional useless
comments, While it is printing, or soon after, you should hop downstairs
and pick up your listing.
For information about the communication protocol, see ImProt.doc[can,sys].
Fonts for the ImPrint-10
Currently, only Rst fonts are used by programs that talk to the ImPrint-10,
namely MakImp and Texto. At Sail, they are kept in the directory [can,sys],
and can be made by running a special version of metafont that resides there.
MAKING Rst FONTS:
Rst format is documented in Rst.inf[can,sys]. Rst source code is
stored as .RAD files on [can,sys]. Documentation is in Rst.ras[up,doc].
You can make an Rst font file by running the copy of MetaFont that is
in [Can,sys] using mode=5. Make sure you use the CMBASE file in [can,sys]
too. The surest way to do this is by connecting to [can,sys] with the
monitor command: ".al can,sys".
Rst fonts come in different magnifications; an Rst font's name is
NAME.R## where ## is one or two digits that specify the magnification
times 10. Thus cmr10 at twice magnification is in a file cmr10.r20, at
half magnification is called cmr10.r5.
So, to make an Rst file on can,sys:
.al can,sys
.ru mf
*mode=5; input cmr10 % to make a font at magnification 1.0 or:
*mode=-5; mag=1.2; input cmr10 % to make a font at magnification 1.2
OTHER PROGRAMS:
RdRst allows you to look at the inside of an Rst file. It sends its
output either to the screen or to a file. Type \? to it for more
information. RdRstI is similar, but only gives information on each
character's dimensions.
Soon, hopefully, RdRst's ascii output file will have a standard format
that can be edited and there will be a MakRst program to convert it back
into an Rst file.
Also, we'll want a program to convert FNT files into the standard ascii
format. How about some Xerox format to ascii too?
SAMPLE FONTS
The programs MakSam and MakSsm make samples of Rst fonts. They are not
quite upto date, but will be up soon. MakSam is for text fonts, displaying
each character plus text. MakSsm makes a smaller sample excluding the text.
MakImp: switches
MakImp excepts several switches. After the file name, type "/"
and any combination of the following:
(Note: currently there is no way to produce multiple copies)
P # # PAGE RANGE (default -100:250) eg "p1:2" or "p7"
For DVI files, TEX page numbers are used. Note that this means that
if TEX never does a "\advcount0" call, every page is numbered 0.
For listings, the first page in number 1, new pages begin with each
form-feed character.
M # Magnification (range 0.1-9.9); eg "m1.2"
For DVI files, this magnifies the whole document by #. Note that you
can get into trouble by making the text larger than the page, in
which case MakImp will complain endlessly and chop off the extra.
If given, this mag will override the recommended mag given by TEX
in the DVI file, ie the results of a TEX "\magnify 1200" statement.
For listings, this will only magnify the font used to make the listing,
so the text will not run off of the page. Note that the default
font is at mag 0.8 already.
Setting Margins. The default margins put a one inch margin on the top and
left of most TEX output and listings. Examples show how to move margins
an inch toward the center of the page. Note that these are all absolute
pixel coordinates. On an ImPrint-10 there are 240 pixels per inch.
It is currently physically impossible for the ImPrint to print outside of
the given range.
← # Left Margin (default 262, range 0-1982); eg "←262"
→ # Right Margin (default 1982, range 0-1982); eg "←1982"
↑ # Top Margin (default 130, range 0-2330); eg "↑130"
→ # Right Margin (default 2330, range 0-2330); eg "↓2332"
TEX assumes there will be a left margin and may write left of it by giving
negative x-coordinates. MakImp will get violent if a TEX location is left
of zero. If this happens, look at the number MakImp tells you and
recompile, increasing the margin to at least that absolute quantity. And
do not increase it so much that the page goes too far to the right!
The top margin is added to every y-coord of your document, lowering the
page. TEX starts printing with a baseline at y=0, which to Canon means
about 1/2 inch from the top of the paper; ↑130 moves the document down so
TEX's y=0 baseline starts about 10 points (cmr10 font height) below the
top of the page. The bottom margin is an absolute pixel value below which
you can not print. Currently, Canon does not print below this coordinate,
so if you get an error that some y value is too large, raise the document
on the paper by making the ↑ value smaller. The left and right margin
values work like top and bottom, respectively.
T # Type of input file, # is one of: "L","D","R", specifying that the type of
input file is either a listing, a DVI file or an Rst file. MakImp will
look for a file of the specified type if you give one, otherwise, it will
use the file extension to determine the type, an unknown extension meaning
the file is a listing. If the file has no extension, MakImp will look for
a file with no extension, then try a few extensions it knows and infer the
type of fiie accordingly.
MakImp will echo its parameters as it begins processing your file, eg:
Input file name: big
Found DVI source big.dvi
M= 1.0 standard-paper pp:-100→250 ←262 →1982 ↑=130 ↓2332
extra information: font expansion, other switches, sources
The following two switches are for listings:
F s Font s, where s is a string (default CMSA10.R8); eg "CMSA10.R20"
This font is used for printing listings. Note that a font magnification
times 10 (the .R8 extension means at 0.8 mag) is included in the font
name. If no extension is given, @1.0 is assumed. And as noted above,
this magnification is multiplied by the global file magnification to get
the final font mag.
↔ # Spacing #, (default 1, range 1:4); eg "↔2" gives double spacing
Rst FONT FILE EXPANSION
Given an rst file as input, or a name and the switch "tR" MakImp will
produce pictures of the font expanded. The user will be prompted for the
size of each pixel and which characters ze wants to be printed. This
gives quick feedback to people creating small fonts where it is important
to see individual pixels. To view a magnified font, the extension must be
included in the file name.
OTHER SWITCHES
! The following swithes should not be used;
S s/l Size of paper- standard is 8.5x11 (the default), legal is 8x14.
Currently, though, Canon can only print on 8.5x11 paper, so there's
no reason to use this switch. Even if it could take longer paper,
the software can not print on it.
! The following is not well implemented, try not to use it;
I # Input data space (default 2, range 2-6); the maximum
number of 8k chunks of storage bytes available for input on a page.
This depends on how much space is available in the ImPrint CPU,
which is currently =55k. The rest of the space is given to
glyph data.
! The following are not up to date;
B# deBugging flags, default-none. "+" gives 1,2,4; "-" gives 1-6;
1-diagnostics 2-flow of control 3-verbose flow 4-debugging data
5-verbose data 6- 7-deletepack info 8-addnewchar info
9-draw chars on last page
All output goes to terminal and .ERC file.
MakImp SOURCES
Sail sources for MakImp and related files are kept as .SAD files on
[can,sys]. They are uptodate as of 1/25/82- ras.
The Pascal version of MakImp is currently under construction. The earliest
it might appear is in early February...
text output and errors
READING MakImp TEXT OUTPUT:
With no debugging flags set, MakImp prints a little output as it runs, eg:
[5.][4.][3.][2.][1.]
The number is the page number of the current page, the period is printed
when the page has been parsed, the "]" when the ImPress page has been
output to the Imp file.
If any errors are encountered, a .ERC file is opened and all messags go to
that file as well as to the screen.
When any debugging flag has been set, MakImp writes all output to a .ERC
file and produces at least one line of output for every page, eg:
[3⊂⊃⊂⊃.(c677)(ε91)(g13000 p9041)(p4312→1110) totpage=0 (o)]
The first number is the current page number according to TEX. A "⊂" is
printed whenever a font file is opened to be read; when it has been read
in, the "⊃" is printed. The period signifies that the page has been
parsed.
The "(c#)" tells how many glyph objects are on the page, "(ε#)" tells the
number of different glyphs that are currently defined, "(g# p#)" tells how
much glyph data is needed total, and how much needed on the page. If the
number in "g#" is larger than a certain amount (currently 48k), then the
next field will appear. "(pA→B)" means a pack was done, and the amount of
glyph data went from A to B. TotPage is the total number of description
bytes on the page. Currently the number for the totpage is wrong.
USER ERRORS:
A user error is that which causes an error message. It is most often
caused by a missing font file or typesetting off of the page. The former
can presently only be prevented by knowing which fonts are in [can,sys]
and generating any that are not there. The latter can be fixed by running
MakImp again, resetting the margins' values with switches, as described on
page 8. Both types of errors can be most easily caused by exaggerated
magnification. Also, a TEX error message telling of a box that is grossly
overfull might cause a "page-too-wide" error.
MakImp ERRORS:
MakImp is a research project of fluxuating priority. Bugs are promptly
addressed, if not fixed, but there have been no efforts to perform
exhaustive testing. Please report any bugs. Sending your ERC file and a
pointer to the original DVI file will help immeasurably.
The only crashing error of which I know, occurs if there are too many
objects and typesetting commands on the page. Currently 20000 words,
80000 bytes are allocated to the command array, much more than the ImPrint
can handle and much more than appears on any reasonable page. Because of
the use of Sail byte pointers, bounds checking is not obvious and not
done. Overflowing this array could cause unpredictable errors... This
will be fixed soon.
ImPress format, Read-IMP program
".Read ImPress" points you to ImPres.ras[up,doc], which describes both the
ImPress language and ImPress file format. There is also an ImPress manual
produced by Imagen and a file hidden somewhere on a Vax.
Basically, ImPress files contain the images of characters to be typeset
and a description of where to print each character or rule. ImPress files
are byte oriented, on Sail 4 bytes are packed per word in the (left) high
order bytes.
READING ImPress FILES- RdImp
RdImp translates ImPress files at Sail into ascii .IMR files. The format
is not quite like the ascii format in the manual which I found hard to
read. In addition, search for "!!"'s in the text to find caught errors or
warnings. Comments are enclosed in parentheses. Right before POPs, and
NL commands, the current page coordinate is added as a comment.
To run RdImp, just type ".R RdImp" to Sail and you will be prompted for an
IMP file name. Pictures of characters are not included in the IMR file.
To view these, add the switch "/c" to the file name and the images will be
sent to a .IMC file.
WRITING ImPress FILES
Currently, there is no IMR→IMP program, although it would be nice.
Someday it will be added as a MakImp input capability.
Overview
This description is for people writing programs that will produce ImPress
files. It is meant only as an overview, the ImPress manual contains the
actual specification of the ImPress language.
The Imp language is quite stable, except for the addition of some graphics
commands. The file format is also stable, except for the first few bytes
of the file. An overview of the format of an IMP file at Sail follows.
This format is sent directly to our ImPrint.
[January 25, 1982]
<#> - an ascii decimal "1":"6", the number of 8k blocks to give to
the input data, the rest of 55k goes to character storage.
MakImp's default is "2", allowing plenty of room for fonts.
<string> - any chars followed by a null, usually the file name.
"ImagImPr" - NOT followed by a null.
So, if "?" stands for the null character, the file WEAVE.IMP, made from a
TEX DVI source would start with the string "2WEAVE.TEX?ImagImPr" in the
first 19 bytes of the file, one character per byte.
Next come the pages. Before each page come character deletion and
definition commands. These can come in the page, but result in less
efficient operation of the ImPrint.
MakImp puts character deletions and definitions BEFORE pages. A page
starts with a PAGE command contains typesetting commands and ends with an
ENDPAGE command. Typesetting commands consist of commands to move an
abstract cursor and to print rules (black rectangles) and predefined
characters at the cursor's position.
For an example of these commands, see the Sail source ImpDef.sai[imp,ras]
for the command codes and the file ImpFun.sai[imp,ras] for little
procedures that output the commands- they will tell you the exact
parameters for each command.
The ImPrint has finite space for glyphs so you may need to tell it to
delete some between pages. MakImp has two space counting variables,
GLYPAGE knows how much glyph (char) space is used on a page, GLYDATA knows
how much is in the Imprint already AND on the page.
MakImp parses a page, sending the typesetting commands to one buffer and
the glyph defs to another. As it eats the page, if glydata goes too high,
it stops defining new chars, inserting blanks when they are needed, and
outputs an error message.
After the page is parsed, things are sent to the IMP file. First, if
glydata is too high, all chars not used on the page are deleted with
delete-char commands. Then new chars are sent to the IMP file from the
char buffer. Then the PAGE command is output followed by all of the
commands from the other buffer, then the ENDPAGE command.
When all the pages are finished, the EOFile command is given to the IMP
file, which is now done.
In the character definition commands, the format of the bit map is exactly
that of the Rst font file. See Rst.sai[rst,ras], ImpFon.sai[imp,ras] p4
and ImpFun.sai[imp,ras] p2 for examples of how a glyph definition command
is given. Currently, no font definition commands need to be given.
There are two types of fonts, resident and external and two types of
representations, raster and encoded. Currently, all fonts used are
external raster fonts. Encoded fonts are not yet defined and might never
appear as external fonts.
Characters of external fonts need no font definition command because the
character definition command associates an image with a particular character
of a font. Resident fonts need a font definition, to know which font to
asociate with a particular font number. They need no character definitions
because that information is resident. For resident fonts, MakImp needs to
know each character's printing width as well as how much memory each
resident font requires (they are read from prom to main memory as needed).
Currently, there are no resident fonts and the width file format is yet to
be defined.
.......................................................
ImPrint-10: starting the CPU
Note: if Canon is not up, hopefully a message about its condition was
left in the file Canon.con[can,sys].
The CPU has three states: Wait, Diagnostic monitor and 68k monitor.
Upon power-up, programs are read from PROM and Canon enters the Wait state.
WAIT STATE
This is the printing state. The CPU is waiting for amy event, such as a
message from the serial line signalling a print request. Thus turning on
the ImPrint puts it into the Wait state.
Typing the (Zenith) console's BREAK key will force entry into the 68k
monitor. Typing any other character on the console will force entry into
the Diagnostic Monitor.
DIAGNOSTIC MONITOR
This is used for software debugging. Perhaps someday there'll be a
pointer here to documentation about all the options... For the moment, all
you have to know is that "Q <return>" quits the monitor, returning you to
the wait state. And BREAK sends you to the 68k monitor.
68K MONITOR
The 68000 board comes with a small monitor for debugging, which, on Canon,
can be activated by hitting the console's BREAK key. Two commands are of
interest. "C <return>" causes program continuation and "Z <return>" causes
system initialization.
INITIALIZATION
To initialize the ImPrint-10, either power it up, with the on/off switch
on the back side of the card cage (on the right end), or press the console's
BREAK key and type "Z <return>". It will enter wait state and be ready to
respond to print requests from Sail.
Console messages while printing
PRINTING MESSAGES
Upon beginning a print request, three sizes are given:
INP is the number of bytes given to input data
GLY is that available to use as glyph storage
PWI is a mystery
These numbers are in hex (1000 hex = 4096).
SAIL MESSAGES
FAILED LG: A bad packet was received and had to be resent. You may
ignore it. If it happens a lot, something's wrong with the line, and
you should report it.
ERROR MESSAGES
During printing, Canon sends any error messages to the (Heath Kit)
terminal. Do not try to read them- they are written in a South American
dialect specially made to be scrolled off of the screen at high velocity.
Some tanslations follow:
Beginning print of page # 0001; done
No problems!!!
Object Area Overflow:
Too many instances of things are typeset on the page;
Invalid Glyph Dimensions:
Glyph's currently can not have zero height or width.
Undefined Glyph:
Printing a glyph that has not been defined, or whose dimensions were
invalide results in this error.
Something out of paper:
This is a euphemism for something being typeset OFF of the paper, too
far to the right, left, too far up or down.
Unexistent command
Bad Mode
Waiting for permission to compress the Glyph Table
Waiting for Input
Input Page Too Big
Bus Error - currently happens when you try to print characters that are
too large, eg, taller than 128 pixels.
If you think the error messages are cryptic and should provide more
information, that's what I thought, too. Much later, when we get a
spooler, intelligent error messages will be sent back to the print
requester...
Starting the ImPrint-10 Printer
Note: see next page for diagram of Canon's setup in the basement.
INITIALIZING THE PRINTER:
Turn on the printer using the large black plastic toggle on the front,
left side. The green ready/wait light will blink for a few seconds. If
all of the lights are on, try waiting until the CPU is ready. If the CPU
IS ready, try turning it off and on again or panicking as outlined below.
BUTTONS:
The Test/reset light does not work. But if you push the test/reset
button, you'll tell the CPU to print out pages of grid marks. Plus you'll
get the message "Printing Exercise Requested" on the console. Push the
button again to disable it. Soon it will be changed so that each press of
the button generates just one exersize so you won't have to worry about
its state.
The other two buttons are disabled.
ERROR CONDITIONS:
Documentation is in ImPrint's (red, spiral bound) notebook. Briefly...
When lit, the four lights (with sketches above them) mean, from left to
right: (the front of the printer is the side with the lights)
OUT OF PAPER: Either the paper cassette is installed incorrectly or the
ImPrint needs more paper. If the latter, remove the black paper tray from
the left side of the ImPrint (just pull gently but firmly). Find the
paper, NOTE (!) carefully which side is up and add some paper face up to
the tray. Reinsert the tray (put it in approximately the right place,
push gently and the tray will be guided in).
NEEDS PREMIX: Maybe the ImPrint needs more premix. Try opening and
closing the left front panel. If the light persists it probably really
needs it. Find a bottle (a Canon bottle with a picture of a drop like the
picture above the light, look below the ImPrint's table and below the
table near the door) and shake it well. Open the middle panel and pour
half of the bottle into the hole in the black tray that leads to the tank.
PAPER JAM: Some paper may be caught in the ImPrint innards. Try opening
and closing the front left panel. If this does not work, there may really
be some paper caught. Remove it carefully. For help see pages 18-21 of
the "ImPrint LBP-10 Operation Manual". Usually you can pull stuck paper
out from where it goes in or where it comes out. You can try opening
things up, but be careful. Remeber to push the red reset lever down
before closing the top left lid. If you need help, seek RAS, LTP or LES
@Sail.
NEEDS TONER: if the little toner bottle behind the front middel panel is
empty, take it out (turn CCW `135 and pull it out), and replace it with a
full one (probably below the table) making sure the toner is shaken and
the black valve is on the bottle properly and put it back into the
ImPrint. If it is not empty, the toner is clogging the valve, try turning
the bottle CW & CCW a few times.
Turning Off Canon
If you need to turn Canon off, there are two power switches. The one
on the right side of the back turns off the CPU. The one on the left,
front turns off the printing machinery. Turn the printing part off
to avoid shocks when cleaning the corona wires or the drum or if you
need to poke in from the front to clean out jammed paper.
Please do not disconnect other wires. If you do fiddle with anything,
please leave a message in Canon.con[can,sys].
Diagrams
top view:
CPU
___________ on/off
| | | ------------------------------------/\---
| | | | Laser Printer . | |
| Console | --------+ . | |
| Terminal | | | . | |
| | | | paper | . | CPU |
| | | | tray | . | cage |
------------ | | top lid . | |
--------+ . | |
| . | |
---\/----------------xxxxxxxxx-----------
printer ↑ ↑ lights
on/off | |
| |
side door middle panel
Note that only the location of the lights are shown
**************************************************
and the insides:
back
------------------------------------/\---
| . | |
--------+! . | |
| |! . | |
| paper |! D R U. M () | CPU |
| tray |! . INK || | cage |
| |! . TRAY || | |
--------+! . || | |
|↑ X . O -- | |
←left -|-\/-↑---------------↑-------↑----------
| | Premix Toner bottle
handle | hole
red reset lever